package cn.lg.soar.common.util.desensitization;

/**
 * 脱敏工具
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface DesensitizationUtil {

    /**
     * 通用脱敏
     * @param data 原始数据
     * @param preLen 前缀长度
     * @param sufLen 后缀长度
     * @param replacement 替换字符
     * @return 脱敏值
     */
    static String string(String data, int preLen, int sufLen, String replacement){
        if (null == data) {
            return null;
        }
        return data.replaceAll("(\\S{"+ preLen +"})\\S*(\\S{"+ sufLen +"})", "$1"+ replacement +"$2");
    }

    /**
     * 通用脱敏
     * @param data 原始数据
     * @param preLen 前缀长度
     * @param sufLen 后缀长度
     * @return
     */
    static String string(String data, int preLen, int sufLen){
        return string(data, preLen, sufLen, "****");
    }

    /**
     * 真实姓名脱敏
     * @param realName
     * @return 脱敏值
     */
    static String realName(String realName){
        if (null == realName) {
            return null;
        }
        return realName.replaceAll("(\\S)\\S*(\\S)","$1*$2");
    }

    /**
     * 手机号码脱敏
     * @param mobilePhone 手机号
     * @return 脱敏值
     */
    static String phone(String mobilePhone){
        if (null == mobilePhone) {
            return null;
        }
        return mobilePhone.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
    }

    /**
     * 身份证脱敏
     * @param idCard 身份证号
     * @return 脱敏值
     */
    static String idCard (String idCard){
        if (null == idCard) {
            return null;
        }
        return idCard.replaceAll("(\\d{6})\\d{8}(\\d{3}[0-9Xx])", "$1********$2");
    }

    /**
     * 银行卡号脱敏
     * @param bankcard 银行卡号
     * @return 脱敏值
     */
    static String bankcard (String bankcard){
        if (null == bankcard) {
            return null;
        }
        return bankcard.replaceAll("(\\d{6})\\d*(\\d{4})", "$1*********$2");
    }

    /**
     * 邮箱脱敏
     * @param email 邮箱号
     * @return 脱敏值
     */
    static String email(String email){
        if (null == email) {
            return null;
        }
        return email.replaceAll("(\\w)\\w*(\\w@\\w*)","$1****$2");
    }

}
